/**
 * Created by LeonTao on 17/2/7.
 */
$(document).ready(function () {
    //设置navbar
    $('#btn-reservation').attr('class', 'navbar-btn btn btn-default btn-active');

    //获取参数
    var getUrlParameter = function getUrlParameter(sParam) {
        var sPageURL = decodeURIComponent(window.location.search.substring(1)),
            sURLVariables = sPageURL.split('&'),
            sParameterName,
            i;

        for (i = 0; i < sURLVariables.length; i++) {
            sParameterName = sURLVariables[i].split('=');

            if (sParameterName[0] === sParam) {
                return sParameterName[1] === undefined ? true : sParameterName[1];
            }
        }
    };

    //设置datetimepicker
    var startTime = $('#datetimepicker1');
    var endTime = $('#datetimepicker2');

    endTime.datetimepicker({
        locale: 'zh-cn'
    });

    startTime.datetimepicker({
        locale: 'zh-cn'
    });


    //是否切换到更新页面 1-查看 2-更新 3-添加
    var update = Number(getUrlParameter('update'));

    items = ['#title', '#inc_name', '#room_name', '#contact_name', '#contact_phone', '#contact_tel',
        '#contact_email', '#contact_position', '#start', '#end', '#allDay', '#post_name', '#recruit_professional',
        '#enrolment_numbers', '#working_place', '#job_requirements', '#working_conditions', '#the_intern',
        '#detail_info'];


    //设置是否可编辑
    setUpdate(update);
    //是否切换到更新页面 1-查看 2-更新 3-添加
    function setUpdate(update) {
        if (1 == update) { //查看
            $('title').html("查看预约");
            items.forEach(function (element) {
                $(element).prop("readonly", true);
                $(element).attr('readonly', true); //versions older than 1.6
            });
            $('#title_label').html('查看预约信息');
            $('#sub1').html('');
            $("#submit_reservation").hide();
            // $("#back").hide();

        } else if (2 == update) {  //更新， 如果是管理员和特殊用户更新不用变为申请状态， 如果是普通用户更新需要再次变为申请状态
            $('title').html("预约更新");
            $('#sub1').html('');
            $('#title_label').html('更新预约信息');
            $("#submit_reservation").text('确认修改');

            var groups = $('.form-group').slice(0, 2);
            for (var i = 0; i < groups.length; i++) {
                $(groups[i]).hide();
            }

        } else if (3 == update) { //添加申请
            $('title').html("预约申请");
            $('#sub1').html('请填写下面的信息(带星的必填)');
            $('#title_label').html('会议室预约申请');
            $("#submit_reservation").text('确认申请');
        }
        //设置邮箱不可更改
        $('#contact_email').attr("readonly", true);
        $('#contact_tel').attr('readonly', true);
        $('#inc_name').attr('readonly', true);
        $('#contact_position').attr('readonly', true);

    }


    //设置各种信息
    function setInputValues(values) {
        items.forEach(function (element) {
            $(element).val(values[element.split('#')[1]]);
            if (element == '#start') {
                var start = moment.unix(values[element.split('#')[1]]);
                startTime.data("DateTimePicker").date(start);

            }
            if (element == '#end') {
                var end = moment.unix(values[element.split('#')[1]]);
                endTime.data("DateTimePicker").date(end);
            }

            if (element == '#allDay') {
                var allDay = values[element.split('#')[1]];
                console.log(' --- allDay --- ' + allDay);
                if (Number(allDay) == 1) {
                    $(element).prop('value', '1');
                } else {
                    $(element).prop('value', '2');
                }
            }

            if (element == '#the_intern') {
                var theIntern = values[element.split('#')[1]];
                if (Number(theIntern) == 1) {
                    $(element).prop('value', '1');
                } else {
                    $(element).prop('value', '2');
                }
            }
        });
        $("#room_name").prop('value', values['room_id']);
    }

    //设置联系人信息
    function setContactValues() {
        $.post('/account-show', function (result) {
            console.log('result ' + result);
            if (result.id === 1) {
                $('#inc_name').val(result.data['inc-name']);
                $('#contact_name').val(result.data['contact-name']);
                $('#contact_phone').val(result.data['contact-phone']);
                $('#contact_tel').val(result.data['contact-tel']);
                $('#contact_email').val(result.data['contact-email']);
                //联系人职位
                $('#contact_position').val(result.data['contact-position']);
            }
        });
    }


    //是否是查看与修改页面，如果是，设置信息
    var id;
    var role = 2; //用户角色 1-管理员，2-普通用户 3-特殊用户

    if (update == 3) { //  如果是添加页面
        var roomId = getUrlParameter('roomId');
        console.log("roomId: ", Rooms[roomId - 1].name);
        $("#room_name").prop('value', Rooms[roomId - 1].id);
        setContactValues();
    } else { //如果是查看和更新页面， 设置已保存的信息
        if (!id)
            id = getUrlParameter('id');
        console.log("id:   ", id);
        $.get('/reservation-query', {id: id}, function (result) {
            console.log('result ' + result);
            if (result.id === 1) {
                setInputValues(result.data);
            }
        });
    }


    //获取填写信息
    function getDataJquery() {
        var data = {};
        items.forEach(function (element) {
            data[element.split('#')[1]] = $(element).val();
        });
        return data;
    }


    //序列化
    function toSerialize(data) {
        var str = '';
        for (var index in data) {
            str = str + index + '=' + data[index] + '&';
        }
        return str;
    }

    //检查必填项不能为空 1-查看 2-更新 3-添加
    function checkNotNone(data) {
        if (update === 3) {
            if (data['inc_name'] == '') {
                generateNotify('', '企业/团队名称不能为空', 'danger');
                return false;
            }

            if (data['contact_tel'] == '') {
                generateNotify('', '企业/团队电话不能为空', 'danger');
                return false;
            }
        }

        if (data['contact_name'] == '') {
            generateNotify('', '联系人姓名不能为空', 'danger');
            return false;
        }

        if (data['contact_phone'] == '') {
            generateNotify('', '联系人手机不能为空', 'danger');
            return false;
        }

        if (data['contact_email'] == '') {
            generateNotify('', '联系人邮箱不能为空', 'danger');
            return false;
        }


        if (data['contact_position'] == '') {
            generateNotify('', '联系人职位不能为空', 'danger');
            return false;
        }
        if (data['title'] == '') {
            generateNotify('', '标题不能为空', 'danger');
            return;
        }

        if (data['start'] == '') {
            generateNotify('', '起始时间不能为空', 'danger');
            return false;
        }
        return true;
    }

    //点击添加或者更新预约
    $('#submit_reservation').click(function () {
        // id设置为当前时间毫秒值 Get Timestamp in Seconds in JavaScript
        $.post('/account-check', function (result) {
            console.log('account-check  result ----- ' + result.id);
            role = result.id; //检查用户角色

            var data = getDataJquery();
            //检查必填写项不能为空
            if (!checkNotNone(data)) {
                return;
            }

            var ev = new EmailValidator();
            if (!ev.validateEmail(data['contact_email'])) {
                generateNotify('', '邮箱格式错误', 'danger');
                return;
            }


            var start = moment(startTime.data("DateTimePicker").date());
            var end = moment(endTime.data("DateTimePicker").date());
            var now = moment();

            //验证时间
            if (Number(data['allDay']) != 1) { //如果不是全天
                if (data['end'].trim() === '') {
                    generateNotify('', '结束时间不能不能为空', 'danger');
                    return;
                }
            } else {  //全天
                //如果是全天，自动设置结束时间
                var array = start.toArray().splice(0, 3);
                start = moment(array).add(8, 'hours');
                end = moment(array).add(22, 'hours');
                startTime.data("DateTimePicker").date(start);
                endTime.data("DateTimePicker").date(end);
            }


            //普通用户不能申请周末和晚上
            console.log('--- role --- ', role);
            if (role === 2) { //普通用户
                if (start.weekday() > 5 || end.weekday() > 5 || start.hours() >= 18) {
                    generateNotify('', '只能申请上班时间段（每天8点-18点）, 如有问题请联系管理员', 'danger');
                    return;
                }
                if (end.hours() > 18 || (end.hours() == 18 && end.minutes() > 0)) {
                    generateNotify('', '只能申请上班时间段（每天8点-18点）, 如有问题请联系管理员', 'danger');
                    return;
                }

            }

            //时间小于8点， 大于22点
            if (Number(data['allDay']) != 1) {
                //起始时间要大于当前时间
                if (start < now) {
                    generateNotify('', '起始时间要大于当前时间', 'danger');
                    return;
                }

                if (end <= start) {
                    generateNotify('', '结束时间应大于起始时间', 'danger');
                    return;
                }

                console.log('start.hour ' + start.hour());
                if (start.hour() < 8) {
                    generateNotify('', '起始时间要大于早上8点', 'danger');
                    return;
                }

                console.log('end.hour ' + end.hour());
                if (end.hour() >= 23) { //22 管理员要不要设置到23点
                    if (end.hour() == 23) {
                        if (end.minute() > 0) {
                            generateNotify('', '结束时间要小于晚上11点', 'danger');
                            return;
                        }
                    } else {
                        generateNotify('', '结束时间要小于晚上11点', 'danger');
                        return;
                    }
                }
            }

            if (data['allDay'] == '') { // 默认不是全天
                data['allDay'] = '2';
            }

            if (data['the_intern'] == '') { //默认不招收实习生
                data['the_intern'] = '2';
            }

            data['start'] = start.unix();
            data['end'] = end.unix();

            //设置预约id, 为当前时间毫秒值
            if (update == 3) { //添加页面
                id = Math.floor(Date.now() / 1000);
            } else { //如果是更新或者查看页面，获取已有id
                if (!id)
                    getUrlParameter('id'); //获取id
            }

            data['id'] = id;
            data['room_id'] = Rooms[Number(data['room_name']) - 1].id;
            data['room_name'] = Rooms[Number(data['room_name']) - 1].name;
            var findQuery = {'type': update, 'room_id': data['room_id'], 'start': data['start'], 'end': data['end']};

            data['type'] = update; // 1- 查看， 2 - 更新 3 -添加
            //检查时间段是否可用
            $.post('/check-room-reservation', toSerialize(findQuery), function (result) {
                if (result.id === 1) { //没有时间冲突
                    add(data);
                } else if (result.id == 2) { //可能有时间冲突，管理员和特殊用户直接申请， 普通用户弹框提醒
                    if (role === 1 || role === 3) { //管理员和特殊用户
                        add(data);
                    } else { //普通用户
                        bootbox.confirm({
                            message: result.msg,
                            buttons: {
                                confirm: {
                                    label: '继续申请',
                                    className: 'btn-primary'
                                },
                                cancel: {
                                    label: '修改时间',
                                    className: 'btn-default'
                                }
                            },
                            callback: function (result) {
                                if (result) { //继续申请
                                    add(data);
                                }
                            }
                        });
                    }
                } else if (result.id == 3) { //有时间冲突 ，失败。所有用户都不能申请
                    generateNotify('', result.msg, 'danger');
                    //调回到预约日历页面
                    // window.history.back();
                } else if (result.id == 4) { //预约已存在
                    generateNotify('', result.msg, 'danger');
                }
            });

        });
    });

    //返回
    $("#back").click(function () {
        if (update == 3) { //如果是添加页面
            console.log('update ----- ' + update);
            var roomId = getUrlParameter('roomId');
            window.history.back();
        } else if (update == 2) { // 如果是修改页面
            // $(location).attr('href', '/reservation-my');
            window.history.back();
            // $(location).attr('href', '/reservation-my?user=' + user);
        } else { //查看页面
            window.history.back();
        }

        return false;
    });

    //添加预约
    function add(data) {
        console.log(' --- add --- ');
        $.post('/reservation-add', toSerialize(data), function (result) {
            console.log(' --- result --- ' + result);
            if (result.id === 1) {//成功
                // if (update == 2) { //修改
                //     generateNotify('', '预约信息更新成功', 'success');
                // } else {
                //     generateNotify('', result.msg, 'success');
                // }
                generateNotify('', result.msg, 'success');
                var url = '/reservation?roomId=' + data['room_id'];
                setTimeout(function () {
                    $(location).attr('href', url);
                }, 300);
            } else if (result.id === 2) { //失败
                /*if (update == 2) { //修改
                    generateNotify('', '预约信息更新失败', 'danger');
                } else {
                    generateNotify('', result.msg, 'danger');
                }*/
                generateNotify('', result.msg, 'danger');
            }
        });
    }


});
